package com.api.util;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.zyncro.api.model.IApiType;

public final class TestUtils {

	public static final int MIN_ITEMS_COUNT_API_VALUE = 10;

	private TestUtils() {
	};

	public static long newDateValue() {

		Date date = new Date();

		return date.getTime();
	}

	// public static <T extends Enum<? extends IdEnum>> List<T> getEnumList(
	// List<? extends Enum<? extends IApiType>> apiEnumsList,
	// Class<T> targetClass) {
	//
	// List<T> list = new ArrayList<T>();
	//
	// for (Enum<? extends IApiType> apiEnum : apiEnumsList) {
	//
	// IApiType enumValue = (IApiType) apiEnum;
	//
	// try {
	//
	// T objectiveEnum = getTypeForValue(targetClass,
	// enumValue.getId());
	//
	// list.add(objectiveEnum);
	// } catch (Exception ex) {
	//
	// throw new IllegalStateException(String.format("Couln't obtain enum list of '%s' type from list '%s' of type '%s'",
	// targetClass.getSimpleName(), apiEnumsList,
	// enumValue.getClass().getSimpleName()), ex);
	// }
	// }
	//
	// return list;
	// }
	//
	// private static <T extends Enum<? extends IdEnum>> T getTypeForValue(
	// Class<T> enumClass, int idValue) {
	//
	// Enum<? extends IdEnum> value = null;
	//
	// Enum<? extends IdEnum>[] values = enumClass.getEnumConstants();
	//
	// int i = 0;
	//
	// while (i < values.length && value == null) {
	//
	// IdEnum enumValue = (IdEnum) values[i];
	//
	// if (enumValue.getId() == idValue) {
	//
	// value = values[i];
	// } else {
	// i++;
	// }
	// }
	// if (value != null) {
	//
	// @SuppressWarnings("unchecked")
	// T enumValue = (T) value;
	//
	// return enumValue;
	// } else {
	// throw new IllegalStateException(String.format(
	// "There is not enum constant for value '%s' in class '%s'",
	// idValue, enumClass.getSimpleName()));
	// }
	// }

	public static <T extends Enum<? extends IApiType>> List<T> getCompleteEnumList(Class<T> targetApiClass) {

		List<T> list = new ArrayList<T>();

		for (Enum<? extends IApiType> enumValue : targetApiClass.getEnumConstants()) {

			@SuppressWarnings("unchecked")
			T value = (T) enumValue;

			list.add(value);
		}
		return list;
	}

	public static List<String> asStringList(Object... objs) {

		List<String> list = new ArrayList<String>();

		for (Object obj : objs) {

			list.add(String.valueOf(obj));
		}

		return list;
	}

	public static <T> List<T> asList(T... objs) {

		List<T> list = new ArrayList<T>();

		for (T obj : objs) {

			list.add(obj);
		}

		return list;
	}
}
